This is a solo, default double weapons trace:
Facility: double pp7
1d3ec4

(800b7548, set from 1E to 1F, and try to get a bombcase...)

assignment

7F005B04:
JAL	7F005710
LW	A0, 0004 (S0)	//A0=righthanded weapon; S0=weapon assignment command address

7F005710:
ADDIU	T6,A0,FFFD	//T6=A0-3
ADDIU	SP,SP,FFE8	//SP=803B3640
SLTIU	AT,T6,002E	//AT true if weapon value less than 31
SW	RA,0014 (SP)	//803B3640=7f005b0c (save path)
BEQ	AT,R0,7F00579C	//if unarmed, branch
ADDIU	A1,R0,FFFF	//A1= -1
SLL	T6,T6,2		//T6*4=8
LUI	AT, 8005
ADDU	AT,AT,T6	//add address offset for weapon
LW	T6,F0F0 (AT)	//PULL 8005F0F0 + OFFSET
JR	T6		//PP7 routine 7F00579C
NOP

7F00579C:
BLTZ	A1,7F0057B4	//if A1<0, branch
OR	V0,R0,R0	//V0=0


7F0057B4:
LW	RA,0014 (SP)	//RA=803B3654=7F005B0C
ADDIU	SP,SP,0018	//SP=803B3658
JR	RA
NOP

7F005B0C:
LW	A0,0008 (S0)	//Load double!  A0=weapon value
BLTZ	A0,7F005B34	// if not a double, branch
NOP
JAL	7F005710	//double weapon load!
NOP

^7F005710
ADDIU	T6,A0,FFFD	//T6=weapon number - 3
ADDIU	SP,SP,FFE8	//SP=803B3640
SLTIU	AT,T6,002E	//AT=1 if weapon < 31
SW	RA,0014 (SP)	//803b3654=7f005b20
BEQ	AT,R0,7F00579C	//if unarmed, branch
ADDIU	A1,R0,FFFF	//A1= -1
SLL	T6,T6,2		//T6=wep # *4
LUI	AT,8005
ADDU	AT,AT,T6
LW	T6,F0F0 (AT)	//T6=8004F0F0 + offset
JR	T6
NOP

^7F00579C:
BLTZ	A1,7F0057B4	//if A1<0, branch
OR	V0,R0,R0	//V0=0


^7F0057B4:
LW	RA,0014 (SP)	//RA=803B3654=7F005B20
ADDIU	SP,SP,0018	//SP=803B3658
JR	RA
NOP

* this routine is missing in MP
7F005B20:
LW	A0,0004 (S0)	//A0=right weapon value
JAL	7F08C50C
LW	A1,0008 (S0)	//A1=Left Weapon Value

7F08C50C:
ADDIU	SP,SP,FFE8	//SP=803B3640
SW	RA,0014 (SP)	//7F005B2C->803B3654
SW	A0,0018 (SP)	//right weapon->803B3658
JAL	7F08C39C
SW	A1,001C (SP)	//left weapon->803B365C

7F08C39C:
ADDIU	SP,SP,FFE8	//SP=803B3628
SW	RA,0014 (SP)	//7F08C520->803B363C
JAL	7F08C338
NOP

7F08C338:
LUI	T6,8008
LW	T6,A0B0 (T6)	//T6=8007A0B0=800B6360
ADDIU	A2,R0,0003	//A2=3
LW	V0,11E0 (T6)	//V0=0, ->800B7540
BEQ	V0,R0,7F08C390	//if=0, branch
OR	V1,V0,R0	//V1=V0

7F08C390:
OR	V0,R0,R0	//V0=0
JR	JA		//Jump to 7F08C3AC
NOP

7F08C3AC:
LW	RA,0014 (SP)	//RA=803B363C=7F08C520
SLTU	T6,R0,V0	//R0&V0=0, so T6=0
OR	V0,T6,R0	//V0=T6
JR	RA
ADDIU	SP,SP,0018	//SP=803B3640

7F08C520:
BNEL	V0,R0,7F08C560	//If V0!=R0, branch
OR	V0,R0,R0	//V0=0
JAL	7F08C244
NOP

7F08C244:
LUI	V1,8008
LW	V1,A0B0 (V1)	//V1=8007A0B0=800B6360
OR	V0,R0,R0	//V0=0
LW	A0,11E8 (V1)	//A0=800B7548=1E
BLEZL	A0,7F08C294	/if A0<=0, branch
OR	V0,R0,R0	//V0=0
LW	A1,11E4 (V1)	//A1=800B7544=801EA3D0
ADDIU	V1,R0,FFFF	//V1= -1
OR	A2,R0,R0	//A2=0
OR	A3,A1,R0	//A3=A1
LW	T6,0000 (A3)	//T6= -1
ADDIU	V0,V0,0001	//V0++, V0=1
SLT	AT,V0,A0	//AT=1
BNE	V1,T6,7F08C288	//If V1(-1)!=T6(-1), branch
ADDIU	A3,A3,0014	//A3=801EA3E4
JR	RA		//jump to 7F08C530
ADDU	V0,A1,A2	//V0=801EA3D0

7F08C530:
BEQ	V0,R0,7F08C554	//if null pointer, branch
OR	A0,V0,R0	//A0=V0=801EA3D0
ADDIU	T6,R0,0003	//T6=3
SW	T6,0000 (V0)	//801EA3D0=3
LW	T7,0018 (SP)	//T7=803B3658=right weapon value
SW	T7,0004 (V0)	//801EA3D4=right weapon value
LW	T8,001C (SP)	//T8=803B365C=left weapon value
JAL	7F08C194
SW	T8,0008 (V0)	//801EA3D8=left weapon value

7F08C194
LUI	V1,8008
ADDIU	V1,V1,A0B0	//V1=8007A0B0
LW	T6,0000 (V1)	//T6=800B6360
ADDIU	SP,SP,FFE8	//SP=803B3628
SW	RA,0014 (SP)	//803B363C=7F08C554
LW	V0,11E0 (T6)	//V0=800B7540=0
BEQL	V0,R0,7F08C1DC	//if NULL, branch
SW	A0,000C (A0)	//801EA3D0->801EA3DC

7F08C1DC:
SW	A0,0010 (A0)	//801EA3D0->801EA3E0
LW	T2,0000 (V1)	//T2=8007A0B0=800B6360
JAL	7F08C054
SW	A0,11E0 (T2)	//800B7540=801EA3D0

7F08C054:
ADDIU	SP,SP,FFF8	//SP=803B3620
SW	S0,0004 (SP)	//S0=801D3EC4
LW	A1,0000 (A0)	//A1=3
ADDIU	T3,R0,0001	//T3=1
ADDIU	V0,R0,FFFF	//V0= -1
BNE	T3,A1,7F08C080
ADDIU	V1,R0,FFFF	//V1= -1

7F08C080:
ADDIU	T5,R0,0003	//T5=3
BNE	T5,A1,7F08C09C
ADDIU	S0,R0,0002	//S0=2
LW	V0,0004 (A0)	//V0=right weapon value
LW	V1,0008	(A0)	//V1=left weapon value
BEQ	R0,R0,7F08C0A8
ADDIU	S0,R0,0002	//S0=2

7F08C0A8:
LUI	T4,8008
ADDIU	T4,T4,A0B0	//T4=8007A0B0
LW	A3,0000 (T4)	//A3=800B6360
LW	A2,000C (A0)	//A2=801EA3D0
LW	T6,11E0 (A3)	//T6=801EA3D0
OR	A1,A2,R0	//A1=A2
BEQL	A2,T6,7F08C18C	//if same pointer, branch
LW	S0,0004 (SP)	//S0=801D3EC4

7F08C18C:
JR	RA		//jump to 7F08C1EC
ADDIU	SP,SP,0008	//SP=803B3628

7F08C1EC:
LW	RA,0014 (SP)	//RA=803B363C=7F08C554
ADDIU	SP,SP,0018	//SP=803B3640
JR	RA
NOP

7F08C554:
BEQ	R0,R0,7F08C560
ADDIU	V0,R0,0001	//V0=1
***OR	V0,R0,R0
LW	RA,0014 (SP)	//RA=7F005B2C
ADDIU	SP,SP,0018	//SP=803B3658
JR	RA
NOP

7F005B2C:
BEQ	R0,R0,7F005B40
LW	T8,007C (SP)	//T8=0

7F005B40:
BNEZ	T8,7F005B70
NOP
LW	T6,0004 (S0)	//T6=801D3EC8=right weapon value
LUI	AT,8008
ADDIU	T7,R0,0001	//T7=1
SW	T6,99E0 (AT)	//800799E0=right weapon value
LW	A0,0008 (S0)	//A0=801D3ECC=left weapon value
SW	T7,007C (SP)	//803b36d4=1
LUI	AT,8008
BLTZ	A0,7F005B70	//if not a left weapon, branch
NOP
SW	A0,99E4 (AT)	//800799E4=left weapon value
BEQ	R0,R0,7F005DE4
ADDIU	S0,S0,0010	//S0+=10=801D3ED4

*
7F005DE4---end routine.  sucks up next thingy
*

-----------------------------------------------
facility solo: equipment @ 800799E0
actual equipment list	801ea3d0
equipment format:
0000000F 000000rr 000000LL nextwep last/firstwep
[F]lag	1-single, 3-double
[R]ight weapon
[L]eft weapon
pointer to next weapon data
pointer to last weapon (on first) or first weapon for indexing

7F08C05C:
LW	A1,0000 (A0)	//A1=801EA3D0=single/double
ADDIU	T3,R0,0001	//T3=1
ADDIU	V0,R0,FFFF	//V0= -1
BNE	T3,A1,7F08C080	//if doubles (!1) branch
ADDIU	V1,R0,FFFF	//V1= -1

7F08C080:
ADDIU	T5,R0,0003	//T5=3
BNE	T5,A1,7F08C09C	//if not doubles (!3) branch
ADDIU	S0,R0,0002	//S0=2
LW	V0,0004 (A0)	//V0=801EA3D4=right weapon
LW	V1,0008 (A0)	//V1=801EA3D8=left weapon
BEQ	R0,R0,7F08C0A8
ADDIU	S0,R0,0002	//S0=2

7F08C0A8:
LUI	T4,8008
ADDIU	T4,T4,A0B0	//T4=8007A0B0
LW	A3,0000 (T4)	//A3=8007A0B0=800B6360
LW	A2,000C (A0)	//A2=801EA3DC=801EA3D0
LW	T6,11E0 (A3)	//T6=800B7540=801EA3D0
OR	A1,A2,R0	//A1=A2=801EA3D0
BEQL	A2,T6,7F08C18C
LW	S0,0004 (SP)	//S0=803B3624=801D3EC4

7F08C18C:
JR	RA
ADDIU	SP,SP,0008	//SP=803B3628

7F08C1EC:
LW	RA,0014 (SP)	//RA=803B363C=7F08C4C4
ADDIU	SP,SP,0018	//SP=803B3640
JR	RA
NOP

7F08C4C4:
LUI	T8,8008
LW	T8,A0B0 (T8)	//T8=8007A0B0=800B6360
LW	T0,0018 (SP)	//T0=803B3658=WEP VALUE
LW	T9,11EC (T8)	//T9=800B754C=0
SLTI	AT,T0,0021	//AT=1 if T0<21
BEQ	T9,R0,7F08C4F0	//if pointer NULL, branch
NOP

7F08C4F0:
BEQ	R0,R0,7F08C4FC
ADDIU	V0,R0,0001	//V0=1

7F08C4FC:
LW	RA,0014 (SP)	//RA=803B3654=7F005B3C
ADDIU	SP,SP,0018	//SP=803B3658
JR	RA
NOP

7F005B3C:
LW	T8,007C (SP)	//T8=803B36D4=0
BNEZ	T8,7F005B70
NOP
//ELSE:
LW	T6,0004 (S0)	//T6=801D3EC8=5
LUI	AT,8008
ADDIU	T7,R0,0001	//T7=1
SW	T6,99E0 (AT)	//5->800799E0
LW	A0,0008 (S0)	//A0=801D3ECC= -1
SW	T7,007C (SP)	//1->803B36D4
LUI	AT,8008
BLTZ	A0,7F005B70	//if set above, branch
NOP

7F005B70:
BEQ	R0,R0,7F005DE4
ADDIU	S0,S0,0010	//S0=801D3ED4

7F005DE4---  seems I did the spawn block load again...

------------------------------------------------------
MORE OF THE INVENTORY COLLECTION ROUTINE

7F08C2D4:
LW	T7,0000 (V1)	//T7=801EA3D0=3
BNEL	A1,T7,7F08C2F8	//if doubles, branch
LW	V1,000C (V1)	//V1=801EA3D0

7F08C2F8:
BEQL	V1,V0,7F08C30C	//if pointer = same as list start, branch
OR	V0,R0,R0	//V0=0

7F08C30C:
JR	RA	//jump to 7F08C324
NOP

7F08C324:
LW	RA,0014 (SP)	//RA=803B363C=7F08C498
SLTU	T6,R0,V0	//T6=0 if V0=NULL
OR	V0,T6,R0	//V0=T6
JR	RA
ADDIU	SP,SP,0018	//SP=803B3628

7F08C498
BNEL	V0,R0,7F08C4FC	//if V0!=NULL, branch and link
OR	V0,R0,R0	//V0=0
JAL	7F08C244
NOP

7F08C244:
LUI	V1,8008
LW	V1,A0B0 (V1)	//V1=8007A0B0=800B6360
OR	V0,R0,R0	//V0=0
LW	A0,11E8 (V1)	//A0=800B7548=1E
BLEZL	A0,7F08C294
	OR	V0,R0,R0	//V0=0
LW	A1,11E4 (V1)	//A1=800B7544=801EA3D0
ADDIU	V1,R0,FFFF	//V1= -1
OR	A2,R0,R0	//A2=0
OR	A3,A1,R0	//A3=A1=801EA3D0
LW	T6,0000 (A3)	//T6=3 (double -unarmed&none)
ADDIU	V0,V0,0001	//V0++=1
SLT	AT,V0,A0	//if <1E (20), AT=1
BNE	V1,T6,7F08C288	//if a lefty, branch
ADDIU	A3,A3,0014	//A3+=14=801EA3E4

7F08C288:
BNEZ	AT,7F08C26C
ADDIU	A2,A2,0014	//A2+=14=

7F08C26C:
LW	T6,0000 (A3)	//T6=801EA3E4= -1
ADDIU	V0,V0,0001	//V0++=2
SLT	AT,V0,A0	//if <1E, AT=1
BNE	V1,T6,7F08C288
ADDIU	A3,A3,0014	//A3+=14=801EA3F8
JR	RA
ADDU	V0,A1,A2	//V0=801EA3E4

7F08C4A8:
BEQ	V0,R0,7F08C4C4	//if V0=NULL, branch
OR	A0,V0,R0	//A0=801EA3E4 (next inventory)
ADDIU	T6,R0,0001	//T6=1
SW	T6,0000 (V0)	//801EA3E4=1
LW	T7,0018 (SP)	//T7=803B360=1D
JAL	7F08C194
SW	T7,0004 (V0)	//801EA3E8=1D

-------------------------------------

7F08C0C8:
LW	T2,0000 (A2)	//T2=801EA3D0=3
ADDIU	T0,R0,FFFF	//T0= -1
ADDIU	T1,R0,FFFF	//T1= -1
BNE	T3,T2,7F08C0E4	//if not doubles (T3=1), then branch
NOP

7F08C0E4:
BNE	T5,T2,7F08C0F8	//if ONLY a lefty(2), branch
NOP
LW	T0,0004 (A2)	//T0=801EA3D4=right wep
BEQ	R0,R0,7F08C104
LW	T1,0008 (A2)	//T1=801EA3D8=left wep

7F08C104:
SLT	AT,T0,V0	//if T0(wep)<1E, AT=TRUE
BNEL	AT,R0,7F08C124	
LW	A2,000C (A1)	//A2=801EA3DC=801EA3E4

7F08C124:
BNEL	A0,A2,7F08C140
LW	T7,0010 (A0)	//T7=801EA408=801EA3E4

7F08C140:
SW	A2,000C (A0)	//801EA404=801EA3E4
SW	T7,0010 (A1)	//801EA3E0=801EA3E4
SW	A1,0010 (A0)	//801EA408=801EA3D0
SW	A0,000C (A1)	//801EA3DC=801EA3F8
LW	T8,000C (A0)	//T8=801EA404=801EA3E4
SW	A0,0010 (T8)	//801EA3F4=801EA3F8
LW	T9,0010 (A1)	//T9=801EA3E0=801EA3E4
SW	A1,000C (T9)	//801EA3F0=801EA3D0
LW	A3,0000 (T4)	//A3=8007A0B0=800B6360
LW	T0,11E0 (A3)	//T0=800B7540=801EA3F8
BNEL	A0,T0,7F08C180
	LW	A2,000C (A0)	//A2=801EA404 (SKIPS)
SW	A1,11E0 (A3)	//800B7540=801EA3D0
LW	A3,0000 (T4)	//A3=8007A0B0=800B6360
LW	T0,11E0 (A3)	//T0=800B7540=801EA3D0
LW	A2,000C (A0)	//A2=801EA404=801EA3E4
BNE	A2,T0,7F08C0C8
OR	A1,A2,R0	//A1=A2=801EA3E4

7F08C0C8:
next weapon in inventory

------------------------
after list is assembled:

7F08C2D4:
LW	T7,0000 (V1)	//T7=801EA3D0=3
BNEL	A1,T7,7F08C2F8	//if doubles, branch
LW	V1,000C (V1)	//V1=801EA3E4

7F08C2F8:
BEQL	V1,V0,7F08C30C	//if pointer = same as list start, branch
	OR	V0,R0,R0	//V0=0
BNEL	V1,R0,7F08C2D8
LW	T7,0000 (V1)	//T7=801EA3E4=1

7F08C2D8:
BNEL	A1,T7,7F08C2F8
	LW	V1,000C (V1)
LW	T8,0004 (V1)	//T8=801EA3E8=1D
BNEL	A0,T8,7F08C2F8
LW	A1,000C (V1)	//A1=801EA3F0=801EA3F8

repeat until at the end of inventory list...

7F08C30C:
JR	RA
NOP

7F08C324:
LW	RA,0014 (SP)	//RA=803B363C=7F08C498
SLTU	T6,R0,V0	//if V0<0, T6=1
OR	V0,T6,R0	//V0=T6
JR	RA
ADDIU	SP,SP,0018	//SP+=18=7F08C4B0

7F08C498:
BNEL	V0,R0,7F08C4FC	//if test above true, branch
	OR	V0,R0,R0	//V0=0
JAL	7F08C244
NOP


anyway, it's mostly that stuff over and over again
------------------------------------
------------------------------------
Facility MP:
801ed944	MP weapon assignment

read spawny routine:

7F005B04:
JAL	7F005710
LW	A0,0004 (S0)	//A0=801ED948=right weapon val

7F005710:
ADDIU	T6,A0,FFFD	//T6=wep val-3
ADDIU	SP,SP,FFE8	//SP=803B3640
SLTIU	AT,T6,002E	//AT=TRUE if T6<2E
SW	RA,0014 (SP)	//803B3640=7F005B0C (keep place)
BEQ	AT,R0,7F00579C	//if invalid, break
ADDIU	A1,R0,FFFF	//A1= -1
SLL	T6,T6,2		//wep val*4
LUI	AT,8005
ADDU	AT,AT,T6
LW	T6,F0F0 (AT)	//8004F0F0+offset for weapon
JR	T6
NOP

pp7 ROUTINE, since i hacked it...
7F005738:
BLTZ	A1,7F0057B4
OR	V0,R0,R0	//V0=0

7F0057B4:
LW	RA,0014 (SP)	//RA=803B3654=7F005B0C
ADDIU	SP,SP,0018	//SP+=18=803B3658
JR	RA
NOP

7F005B0C:
LW	A0,0008 (S0)	//A0=left wep value
BLTZ	A0,7F005B34	//if not one, branch
NOP
JAL	7F005710
NOP

7F005710:
ADDIU	T6,A0,FFFD	//T6=wep val-3
ADDIU	SP,SP,FFE8	//SP=803B3640
SLTIU	AT,T6,002E	//AT=TRUE if T6<2E
SW	RA,0014 (SP)	//803B3654=7F005B20 (keep place)
BEQ	AT,R0,7F00579C	//if invalid, break
ADDIU	A1,R0,FFFF	//A1= -1
SLL	T6,T6,2		//wep val*4
LUI	AT,8005
ADDU	AT,AT,T6
LW	T6,F0F0 (AT)	//8004F0F0+offset for weapon
JR	T6
NOP

7F00579C:
BLTZ	A1,7F0057B4
OR	V0,R0,R0	//V0=0

7F0057B4:
LW	RA,0014 (SP)	//RA=803B3654=7F005B20
ADDIU	SP,SP,0018	//SP+=18 = 803B3658
JR	RA
NOP

7F005B20:
LW	A0,0004 (S0)	//A0=801ED948=right wep
JAL	7F08C50C
LW	A1,0008 (S0)	//A1=left wep value

***
